package top.lishuoboy.spring.aop.jdk_proxy;

import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Arrays;

@Slf4j
/* 必须的带参构造器 */
@AllArgsConstructor
public class Student19Proxy implements InvocationHandler {
    /** 传被代理的对象接口。需有参构造 */
    private Object obj;

    // 增强的逻辑
    @Override
    public Object invoke(Object proxyObj, Method method, Object[] args) throws Throwable {
        log.warn("方法之前执行。      obj=={}", obj);
        log.warn("方法之前执行。 proxyObj=={}", proxyObj);
        log.warn("方法之前执行。   method=={}", method.getName());
        log.warn("方法之前执行。     args=={}", Arrays.toString(args));
        // 被增强的方法执行
        Object result = method.invoke(obj, args);
        log.warn("方法之后执行。   result=={}", result);
        return result;
    }
}